变量提升:javascript的变量提升往往是由内部变量和全局变量命名相同引起的。
例一:
var v='Hello JS'; (function(){ alert(v); var v='I love JS'; })()
alert出来的是undefined,因为在函数内部定义一个和外部变量名称相同的变量时,变量的声明会提升至第一句,赋值则不会变,所以上述语句其实是这样执行的:
var v='Hello JS'; (function(){ var v; alert(v); v='I love JS'; })()
本例先定义的是全局变量V,在函数里面又定义了内部变量V,alert(v)执行的时候,实际是先在函数内创建变量v,然后执行。
例二:
(function(){ a = 10; alert(window.a); var a = 5; alert(a); })();
先打印出undefined,然后打印5
本例中a=10,没有var,这是js中的隐式全局变量,可以通过this 和 window进行访问。因为在函数内部,所以相当于在函数内部也定义了一个内部变量var a=10。内部变量和全局变量重名,内部变量把全局变量覆盖,这样内部变量值是10,外部变量变成undefined,这样通过window去访问,便是undefined。
例二中的执行顺序相当于:
var a = undefined; (function(){ var a ; a = 10 ; alert(window.a); a = 5; alert(a); })();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。